"""
用函数实现：
接收用户输入的一个数字（关键字参数方式传入函数内），输出该数字的乘法表，数字大于99则提示输入数字过大
注意字符串格式化输出的使用，控制每一列的宽度为11，左对齐
两个函数，一个用于打印乘法表，一个用于获取用户输入的数字并判断其合法性
"""


def get_valid_number():
    """获取并验证用户输入的数字"""
    while True:
        try:
            num = int(input("请输入一个数字(1-99): ").strip())

            # 验证数字范围
            if num <= 0:
                print("错误：请输入大于0的数字！")
                continue
            elif num > 99:
                print("错误：输入数字过大，请输入不超过99的数字！")
                continue

            return num

        except ValueError:
            print("错误：请输入有效的整数！")
            continue


def print_multiplication_table(*, number):
    """打印乘法表
    Args:
        number: 要打印的乘法表数字（关键字参数）
    """
    try:
        print(f"\n{number}的乘法表：")

        # 打印表头
        print("-" * (11 * number))

        # 打印乘法表内容
        for i in range(1, number + 1):
            for j in range(1, number + 1):
                # 计算乘积
                product = i * j
                # 格式化输出，左对齐，宽度为11
                formula = f"{i}×{j}={product}"
                print(f"{formula:<11}", end="")
            print()  # 换行

        # 打印表尾
        print("-" * (11 * number))

    except Exception as e:
        print(f"打印乘法表时发生错误: {str(e)}")


def main():
    try:
        # 获取用户输入
        number = get_valid_number()

        # 打印乘法表
        print_multiplication_table(number=number)

    except KeyboardInterrupt:
        print("\n程序已被用户中断")
    except Exception as e:
        print(f"程序运行出错: {str(e)}")


if __name__ == "__main__":
    main()
